#include <REGX52.H>

/**
  * @brief  串口初始化，//9600bps@11.0592MHz
  * @param  无
  * @retval 无
  */
void UART_Init()
{
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式，8位自动重装定时器
	TL1 = 0xFD;		//设置定时初始值
	TH1 = 0xFD;		//设置定时重载值
	
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1，开始定时器计时
	//这里允许定时器1进行计时，但是不允许定时器1中断，因为TIMER1在串口通信时用来产生波特率
	
	SCON=0x50;   //8位数据,可变波特率，
	PCON &= 0x7F;		//波特率不倍速，最高位置0
	EA=1;   //CPU总中断允许控制位
	ES=1; //串口中断允许位，1允许串口1，0关闭串口1
	//串口通信就是利用定时器1进行定时，产生波特率，但是不允许定时器1产生中断
	//中断是由串口产生的
}


void UartInit(void)		//9600bps@11.0592MHz
{
	PCON &= 0x7F;		//波特率不倍速
	SCON = 0x50;		//8位数据,可变波特率
	AUXR &= 0xBF;		//定时器时钟12T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;		//设置定时初始值
	TH1 = 0xFD;		//设置定时重载值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
}

/**
  * @brief  串口发送一个字节数据
  * @param  Byte 要发送的一个字节数据
  * @retval 无
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte; //把数据写入SBUF，SBUF会自动发送出去。
	while(TI==0);// 发送完毕的时候硬件自动完成置1，TI=1的时候，表示发送数据完毕，串口通信中断，相当于定时器1的TF1位；
	TI=0;//发送数据结束的时候，单片机硬件会把TI自动置1，所以发送完毕后，需要手动进行复位，置零=0
}

/*串口中断函数模板
void UART_Routine() interrupt 4
{
	if(RI==1)
	{
		
		RI=0;
	}
}
*/
